<!DOCTYPE html>
<!-- saved from url=(0073)file:///C:/Users/Administrator/AppData/Local/Temp/MarkdownPadPreview.html -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>README</title>

<style type="text/css">
/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) */
/* Author: Nicolas Hery - http://nicolashery.com */
/* Version: b13fe65ca28d2e568c6ed5d7f06581183df8f2ff */
/* Source: https://github.com/nicolahery/markdownpad-github */

/* RESET
=============================================================================*/

html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
  margin: 0;
  padding: 0;
  border: 0;
}

/* BODY
=============================================================================*/

body {
  font-family: Helvetica, arial, freesans, clean, sans-serif;
  font-size: 14px;
  line-height: 1.6;
  color: #333;
  background-color: #fff;
  padding: 20px;
  max-width: 960px;
  margin: 0 auto;
}

body>*:first-child {
  margin-top: 0 !important;
}

body>*:last-child {
  margin-bottom: 0 !important;
}

/* BLOCKS
=============================================================================*/

p, blockquote, ul, ol, dl, table, pre {
  margin: 15px 0;
}

/* HEADERS
=============================================================================*/

h1, h2, h3, h4, h5, h6 {
  margin: 20px 0 10px;
  padding: 0;
  font-weight: bold;
  -webkit-font-smoothing: antialiased;
}

h1 tt, h1 code, h2 tt, h2 code, h3 tt, h3 code, h4 tt, h4 code, h5 tt, h5 code, h6 tt, h6 code {
  font-size: inherit;
}

h1 {
  font-size: 28px;
  color: #000;
}

h2 {
  font-size: 24px;
  border-bottom: 1px solid #ccc;
  color: #000;
}

h3 {
  font-size: 18px;
}

h4 {
  font-size: 16px;
}

h5 {
  font-size: 14px;
}

h6 {
  color: #777;
  font-size: 14px;
}

body>h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child {
  margin-top: 0;
  padding-top: 0;
}

a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
  margin-top: 0;
  padding-top: 0;
}

h1+p, h2+p, h3+p, h4+p, h5+p, h6+p {
  margin-top: 10px;
}

/* LINKS
=============================================================================*/

a {
  color: #4183C4;
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}

/* LISTS
=============================================================================*/

ul, ol {
  padding-left: 30px;
}

ul li > :first-child, 
ol li > :first-child, 
ul li ul:first-of-type, 
ol li ol:first-of-type, 
ul li ol:first-of-type, 
ol li ul:first-of-type {
  margin-top: 0px;
}

ul ul, ul ol, ol ol, ol ul {
  margin-bottom: 0;
}

dl {
  padding: 0;
}

dl dt {
  font-size: 14px;
  font-weight: bold;
  font-style: italic;
  padding: 0;
  margin: 15px 0 5px;
}

dl dt:first-child {
  padding: 0;
}

dl dt>:first-child {
  margin-top: 0px;
}

dl dt>:last-child {
  margin-bottom: 0px;
}

dl dd {
  margin: 0 0 15px;
  padding: 0 15px;
}

dl dd>:first-child {
  margin-top: 0px;
}

dl dd>:last-child {
  margin-bottom: 0px;
}

/* CODE
=============================================================================*/

pre, code, tt {
  font-size: 12px;
  font-family: Consolas, "Liberation Mono", Courier, monospace;
}

code, tt {
  margin: 0 0px;
  padding: 0px 0px;
  white-space: nowrap;
  border: 1px solid #eaeaea;
  background-color: #f8f8f8;
  border-radius: 3px;
}

pre>code {
  margin: 0;
  padding: 0;
  white-space: pre;
  border: none;
  background: transparent;
}

pre {
  background-color: #f8f8f8;
  border: 1px solid #ccc;
  font-size: 13px;
  line-height: 19px;
  overflow: auto;
  padding: 6px 10px;
  border-radius: 3px;
}

pre code, pre tt {
  background-color: transparent;
  border: none;
}

kbd {
    -moz-border-bottom-colors: none;
    -moz-border-left-colors: none;
    -moz-border-right-colors: none;
    -moz-border-top-colors: none;
    background-color: #DDDDDD;
    background-image: linear-gradient(#F1F1F1, #DDDDDD);
    background-repeat: repeat-x;
    border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD;
    border-image: none;
    border-radius: 2px 2px 2px 2px;
    border-style: solid;
    border-width: 1px;
    font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
    line-height: 10px;
    padding: 1px 4px;
}

/* QUOTES
=============================================================================*/

blockquote {
  border-left: 4px solid #DDD;
  padding: 0 15px;
  color: #777;
}

blockquote>:first-child {
  margin-top: 0px;
}

blockquote>:last-child {
  margin-bottom: 0px;
}

/* HORIZONTAL RULES
=============================================================================*/

hr {
  clear: both;
  margin: 15px 0;
  height: 0px;
  overflow: hidden;
  border: none;
  background: transparent;
  border-bottom: 4px solid #ddd;
  padding: 0;
}

/* TABLES
=============================================================================*/

table th {
  font-weight: bold;
}

table th, table td {
  border: 1px solid #ccc;
  padding: 6px 13px;
}

table tr {
  border-top: 1px solid #ccc;
  background-color: #fff;
}

table tr:nth-child(2n) {
  background-color: #f8f8f8;
}

/* IMAGES
=============================================================================*/

img {
  max-width: 100%
}
</style>
<!--<base href="file:\\\C:\Users\Administrator\Desktop\">--><base href=".">
</head>
<body>
<h1>ZkingBase</h1>
<h2>RxBus</h2>
<p>消息总线，依赖RxAndroid</p>
<p>使用十分简单
在activity或者fragment的onCreate中注册<strong>RxBus.get().register(this);</strong>, 在其他合适的生命周期方法中调用<strong>RxBus.get().unregister(this);</strong></p>
<p>响应的activity或者fragment中监听</p>
<pre><code>//thread规定执行在哪个线程，tags是消息过滤
@Subscribe(thread = EventThread.MAIN_THREAD, tags = {@Tag("loginok")})
public void loginFinish(Object obj)
{
    finish();
}
</code></pre>

<p>发出消息的activity或者fragment中</p>
<pre><code>//此处的"loginok"对应上面监听的tag，data可以是任何数据
RxBus.get().post("loginok", data);
</code></pre>

<h2>PicBroswer</h2>
<p>图片选择裁剪，依赖Glide显示，依赖library Cropper，图片裁剪</p>
<pre><code>在其他activity中使用：

startActivityForResult(new Intent(this, AlbumActivity.class), ActivityCode.SELECT_REQUEST);

重写onActivityResult

if(requestCode == ActivityCode.SELECT_REQUEST)    //裁剪图片
{   //裁剪成功
    if(resultCode == ActivityCode.SELECT_OK_RESULT)
    {
        //返回裁剪过后的图片路径，一般在外部存储的app缓存目录下面
        String bmppath = data.getStringExtra("cropimg");
    }
}
</code></pre>

<h2>libblur</h2>
<p>毛玻璃效果</p>
<p>使用方式：</p>
<pre><code>StackBlurManager m = new StackBlurManager();
//参数bmp是要模糊的图片， 120是模糊半径，不能超过255
Bitmap bmp = m.blur(bmp, 120);
</code></pre>

<h2>cropper</h2>
<p>图片裁剪， 在图片选择模块使用</p>
<hr>
<h2>网络请求</h2>
<p>如果要使用retrofit，已经集成了，可以直接用，框架里面注册登录使用了retrofit</p>
<pre><code>首先定义一个service，就是一个接口
public interface LoginService
{
    @POST("user/dologin?")
    Observable&lt;BaseResp&gt; loginByPhone(@Query("suTel") String phone, @Query("suPassword") String password);
}

初始化
OkHttpClient client = new OkHttpClient.Builder()
                //请求地址拦截器
                .addInterceptor(new LogInterceptor())
                .connectTimeout(timeout, TimeUnit.SECONDS)
                .readTimeout(timeout, TimeUnit.SECONDS)
                .retryOnConnectionFailure(true)
                .build();

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constant.WEB_BASE)     
            //自定义client     
            .client(client)
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .build();

LoginService service = retrofit.create(LoginService.class);
observable = service.loginByPhone(phone, password);
observable.subscribeOn(Schedulers.io())
          .observeOn(AndroidSchedulers.mainThread())
          .subscribe(new Observer&lt;BaseResp&gt;())
            {
                @Override
                public void onSubscribe(Disposable d)
                {
                    //流式设计，此处主要用于拿到disposable
                    dis = d;
                    //onStart用于显示开始等待框
                    presenter.onStart();
                }

                @Override
                public void onNext(BaseResp value)
                {
                    //登录业务逻辑
                    MapInfoBean mi = value.mapInfo;
                    if(mi != null)
                    {
                        User u = mi.user;
                        if(u != null)
                        {
                            presenter.onSuccess(u, null);
                            dispose();
                        }
                    }else
                    {
                        presenter.onFailed(value.info, new Throwable("error"));
                    }

                }

                @Override
                public void onError(Throwable e)
                {
                    presenter.onFailed(getFailedString(e), e);
                    dispose();
                }

                @Override
                public void onComplete()
                {
                    presenter.onComplete();
                    dispose();
                }
            });
</code></pre>

<h1>manager包</h1>
<p>都是单例，使用都是getInstance拿到实例</p>
<ul>
<li>AliManager 			支付宝支付的管理类</li>
<li>AppManager 			用于activity的管理，onCreate添加，onDestroy弹出</li>
<li>GreenDaoManager 	数据库操作</li>
<li>JPushManager 		极光推送</li>
<li>LogManager			全局Log，如果要去掉所有log，调用LogManager.getInstance().setDebug(false)即可</li>
<li>UMManager			友盟登录分享</li>
<li>WXManager			微信登录分享</li>
</ul>
<h3>OKHttpManager</h3>
<p>okhttp3</p>
<p>使用方式：</p>
<h4>POST</h4>
<p>1.</p>
<pre><code>/***
 * &lt;b&gt;发送一个post请求&lt;/b&gt;, 回调要传入类型
 *
 * @param url            链接
 * @param callback       回调函数
 * @param reqBodyParam  请求体参数
 */
public void doPost(String url, Map&lt;String, String&gt; reqBodyParam,final ResultCallback&lt;? extends Object&gt; callback);
</code></pre>

<p>2.</p>
<pre><code>/***
 * &lt;b&gt;发送一个post请求&lt;/b&gt;, 回调要传入类型
 *
 * @param url            请求链接
 * @param callback       回调
 * @param reqBodyParam  请求体参数
 * @param reqHeader     请求头参数
 */
public void doPost(String url, Map&lt;String, String&gt; reqBodyParam, Map&lt;String, String&gt; reqHeader,
                   final ResultCallback&lt;? extends Object&gt; callback);
</code></pre>

<h4>GET</h4>
<pre><code>/***
 * &lt;b&gt;发送一个get请求&lt;/b&gt;, 回调要传入类型
 *
 * @param url      链接
 * @param callback 回调函数
 */
public void doGet(String url, final ResultCallback&lt;? extends Object&gt; callback);
</code></pre>

<h4>download</h4>
<pre><code>/***
 * &lt;b&gt;下载, 回调方法要传入类型
 *
 * @param url              下载链接&lt;br/&gt;
 * @param fileAbsolutePath 文件绝对路径&lt;br/&gt;
 * @param callback         回调&lt;br/&gt;
 */
public void download(final String url, final String fileAbsolutePath, final ResultCallback&lt;File&gt; callback);

如果要监听下载进度，callback里重写onDownloadProgress
</code></pre>

<h4>upload</h4>
<pre><code>/***
 * 文件上传
 * @param url url
 * @param fileAbsolutePath 文件绝对路径
 * @param fileParamName 文件上传的参数名,相当于post的param
 * @param reqHeader 请求头
 * @param callback 回调函数
 */
public void upload(final String url, final String fileAbsolutePath,
                   final String fileParamName, boolean isPicture,
                   Map&lt;String, String&gt; reqHeader, final ResultCallback&lt;? extends Object&gt; callback);

如果要监听上传进度，重写onUploadProgress
</code></pre>

<p>示例：</p>
<pre><code>OkHttpManager manager = OkHttpManager.getInstance();

manager.doPost(Constant.WEB_BASE + "/jpush/notifyOne", null,new OkHttpManager.ResultCallback&lt;BaseResp&gt;()
{
    @Override
    public void onError(String simpleMsg, Exception e)
    {
        Toast.makeText(PushActivity.this, simpleMsg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onSuccess(BaseResp response)
    {
        Toast.makeText(PushActivity.this, response.info, Toast.LENGTH_SHORT).show();
    }
});
</code></pre>




<!-- This document was created with MarkdownPad, the Markdown editor for Windows (http://markdownpad.com) -->
</body></html>